package cn.itcast.mq.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Author: Zheng
 * Date:   2024/3/19  15:22
 * Package：cn.itcast.mq.config
 * Description：
 * Version：1.0
 */
@Configuration
public class FanoutConfig {

    /**
     * @description： 修改默认消息转换器为Jackson2JsonMessageConverter消息转换器
     * @date：2024/3/19  16:40
     * @return：
     **/
    @Bean
    public MessageConverter jsonMessageConverter(){
        return new Jackson2JsonMessageConverter();
    }

    /**
     * @description： 声明一个对象类型的队列
     * @date：2024/3/19  16:48
     * @return：
     **/
    @Bean
    public Queue objectQueue() {
        return new Queue("object.queue");
    }
    /**
     * @description： 声明一个交换机对象，交给Spring容器中管理
     * @date：2024/3/19 15:23
     * @return：
     **/
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange("itcast.fanout");
    }

    /**
     * @description： 声明一个广播队列交给Spring容器管理
     * @date：2024/3/19 15:25
     * @return：
     **/
    @Bean
    public Queue fanoutQueue1() {
        return new Queue("fanout.queue1");
    }

    /**
     * @description： 声明第二个广播模式队列，交给Spring容器管理
     * @date：2024/3/19 15:26
     * @return：
     **/
    @Bean
    public Queue fanoutQueue2() {
        return new Queue("fanout.queue2");
    }

    /**
     * @description： 将第一个广播模式队列与fanoutExchange交换机绑定
     * @date：2024/3/19 15:28
     * @return：
     **/
    @Bean
    public Binding bindingQueue1(Queue fanoutQueue1, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);
    }

    /**
     * @description： 将fanoutQueue2队列与fanoutExchange交换机绑定
     * @date：2024/3/19 15:31
     * @return：
     **/
    @Bean
    public Binding bindingQueue2(Queue fanoutQueue2, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(fanoutQueue2).to(fanoutExchange);
    }

}
